/*******************************************************************************
 * @project: Java_Genericit
 * @package: com.burns.java.generic
 * @file: Test7.java
 * @author: Administrator
 * @created: 2017年5月16日
 * @purpose:
 * 
 * @version: 1.0
 * 
 * Revision History at the end of file.
 * 
 * Copyright 2017 AcconSys All rights reserved.
 ******************************************************************************/

package com.burns.java.generic;

/**
 * 类型通配符上限和类型通配符下限
 * 
 * 此时，显然，在代码//1处调用将出现错误提示，而//2 //3处调用正常。
 * 
 * 类型通配符上限通过形如Box<? extends Number>形式定义，相对应的，类型通配符下限为Box<? super
 * Number>形式，其含义与类型通配符上限正好相反，在此不作过多阐述了。
 * 
 * @author Administrator
 *
 */
public class Test7 {
	public static void main(String[] args) {

		Box<String> name = new Box<String>("corn");
		Box<Integer> age = new Box<Integer>(712);
		Box<Number> number = new Box<Number>(314);

		getData(name);
		getData(age);
		getData(number);

		// getUpperNumberData(name); // 1
		getUpperNumberData(age); // 2
		getUpperNumberData(number); // 3
	}

	public static void getData(Box<?> data) {
		System.out.println("data :" + data.getData());
	}

	/**
	 * 如果需要定义一个功能类似于getData()的方法，但对类型实参又有进一步的限制：只能是Number类及其子类。此时，需要用到类型通配符上限。
	 * 
	 * @param data
	 */
	public static void getUpperNumberData(Box<? extends Number> data) {
		System.out.println("data :" + data.getData());
	}
}

/*******************************************************************************
 * <B>Revision History</B><BR>
 * [type 'revision' and press Alt + / to insert revision block]<BR>
 * 
 * 
 * 
 * Copyright 2017 AcconSys All rights reserved.
 ******************************************************************************/